M-x hippie-expand is a single command providing a variety of completions and expansions. Called repeatedly, it tries all possible completions in succession.
Which ones to try, and in which order, is determined by the
contents of the customizable option
hippie-expand-try-functions-list. Much customization
of the expansion behavior can be made by changing the order of,
removing, or inserting new functions in this list. Given a
positive numeric argument, M-x hippie-expand jumps
directly that number of functions forward in this list. Given
some other argument (a negative argument or just C-u)
it undoes the tried completion.
See the commentary in hippie-exp.el for more information on the possibilities.
Typically you would bind hippie-expand to
M-/ with dabbrev-expand, the standard
binding of M-/, providing one of the expansion
possibilities.